
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {

    /**
     * 第一遍
     * @param nums
     */
//    public void moveZeroes(int[] nums) {
//        int p = removeElement(nums, 0);
//        for (; p < nums.length; p++) {
//            nums[p] = 0;
//        }
//    }
//
//
//    // 将所有的val移动至尾部
//    // 总体思想：将不为0的复制到慢，跳过为0的，遍历一遍后，慢的位置后面就是需要全为0的
//    int removeElement(int[] nums, int val) {
//        // 初始化快慢指针
//        int fast = 0, slow = 0;
//        while (fast < nums.length) {
//            // 如何快指针所指向值不为val，则复制到low值
//            if (nums[fast] != val) {
//                nums[slow] = nums[fast];
//                slow++;
//            }
//            // 如何快指针所指向值为val，则fast往前走，low不变
//            fast++;
//        }
//        return slow;
//    }



    public void moveZeroes(int[] nums) {
        int p = removeElement(nums, 0);
        for (; p < nums.length; p++) {
            nums[p] = 0;
        }
    }

    // 将值为val全部移动值尾部
    int removeElement(int[] nums, int val) {
        // 快慢指针
        int fast = 0, slow = 0;
        while (fast < nums.length) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
